package cn.yangsen.simplebeanmanager.bean.html;

import java.util.List;
import java.util.stream.Stream;

import org.apache.commons.lang3.ArrayUtils;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("table")
public class Table extends Element
{
	public Tr[] getTrs()
	{
		List<Element> elements = getElements();
		if (elements == null)
		{
			return null;
		}
		Stream<Element> st = elements.stream().filter(Tr.class::isInstance);
		if (st == null)
		{
			return null;
		}
		return st.toArray(Tr[]::new);
	}

	public void 添加列(Element[] elements)
	{
		if (ArrayUtils.isEmpty(elements))
		{
			return;
		}
		补全列(elements.length);
		Tr[] 已存在的行 = getTrs();
		for (int i = 0; i < elements.length; i++)
		{
			Td td = new Td();
			已存在的行[i].add(td);
			td.add(elements[i]);
		}
	}

	public void 添加列(int 起始位置, Element[][] elements)
	{
		if (ArrayUtils.isEmpty(elements))
		{
			return;
		}
		补全列(elements.length + 起始位置);
		Tr[] 已存在的行 = getTrs();
		for (int i = 0; i < elements.length; i++)
		{
			Td td = new Td();
			已存在的行[i + 起始位置].add(td);
			td.add(elements[i]);
		}
	}

	public void 添加列(Element[][] elements)
	{
		添加列(0, elements);
	}

	private void 补全列(int 目标长度)
	{
		Tr[] 已存在的行 = getTrs();
		int 已存在长度 = 0;
		if (已存在的行 != null)
		{
			已存在长度 = 已存在的行.length;
		}
		if (已存在长度 < 目标长度)
		{
			for (int i = 已存在长度; i < 目标长度; i++)
			{
				Tr tr = new Tr();
				add(tr);
			}
		}
	}

	public void 添加行(Element[] elements)
	{
		if (ArrayUtils.isEmpty(elements))
		{
			return;
		}
		Tr tr = new Tr();
		add(tr);
		for (Element element : elements)
		{
			Td td = new Td();
			tr.add(td);
			td.add(element);
		}
	}

	public void 添加行(Element[][] elements)
	{
		if (ArrayUtils.isEmpty(elements))
		{
			return;
		}
		Tr tr = new Tr();
		add(tr);
		for (Element[] element : elements)
		{
			Td td = new Td();
			tr.add(td);
			td.add(element);
		}
	}
}
